package bank;
import java.text.ParseException;
import java.util.Date;
import java.util.Scanner;

import database.DatabaseAdapter;
import io.*;
import security.UserAuthentification;


/**
 * @author Dennis Post
 * 
 */
public class Main {

	public static Employer currentEmployer;
	
	/**
	 * (Stellt die »Basisfunktionen« der Software zur Verfuegung)
	 * 
	 * @param args
	 */

	public static void main(String[] args) {

		// Display welcome message

		System.out.println("Willkommen bei [Bank]!");
		
		DatabaseAdapter dbAdapter = new DatabaseAdapter();
		dbAdapter.connectToDatabase();
		
		// OPT: Login with password via String[] args?
		
		Scanner scanner = new Scanner(System.in);  
		
		if(UserAuthentification.loginUser(scanner) != null)
		{
			
		}
		
		// Check for startup arguments
		// FIXME: Does not check for other String[] args values!
		if(args.length == 1){
			performProgramStartMenuSelection(args[0], scanner);
		}
		// No startup arguments found, show Programstartmenu
		else {
			showProgramStartMenu(scanner);
		}
		
	}
	
	
	/**
	 *
	 * Shows the Programstartmenu and checks for user selection
	 * 
	 * @author Dennis Post
	 */
	public static void showProgramStartMenu (Scanner scanner)
	{
		boolean validInput = false;
		String validInputString = "";
		while (validInput == false) {
			/*
			 * Neues Menü: 
			 * (1) Kunden-/Kontenverwaltung
			 * 		(1) Kunde erstellen
			 * 		(2) Kunde ändern
			 * 		(3) Konto erstellen
			 * 		(4) Konto ändern
			 * 		(5) Konto löschen
			 * 		(6) Kunde löschen
			 * (2) Buchungen
			 * 		(1) Überweisung
			 * 		(2) Auszahlung
			 * 		(3) Einzahlung
			 * (3) Bankverwaltung
			 * 		(1) Übersicht aller Konten
			 * 		(2) Summer aller Konten
			 * (4) Benutzerverwaltung
			 * 		(1) Passwort ändern
			 * 		(2) Benutzername ändern
			 * 		(3) Benutzer erstellen
			 * 		(4) Benutzer ändern
			 * 		(5) Benutzer löschen
			 * (5) Beenden
			 */
			System.out.println("\nDrücken Sie die Zahl für die gewünschte Funktion:\n"
					+ "(1) Konto anlegen\n" + "(2) Überweisung ausführen\n"
					+ "(3) Übersicht aller Konten\n"
					+ "(4) Summe aller Konten\n" + "(5) Beenden\n");
			validInputString = scanner.next();
			validInput = Validator.ProgramstartValidate(validInputString);
		}
		performProgramStartMenuSelection(validInputString, scanner);
	}
	
	private static void performProgramStartMenuSelection(String inputString, Scanner scanner)  
	{
		int validInputInt = Integer.parseInt(inputString);
		
//		try {
//			Employer emp = new Employer("Post", "Dennis");		
//			Customer newCustomer = new Customer("Mustermann", "Max", Constants.dt.parse("25.04.1991"), new Date(), emp);
//			Girokonto giro_dennis = new Girokonto(newCustomer, new Date(), emp, 0);
//			giro_dennis.deposit(248.93f);
//		} catch (ParseException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		
		switch (validInputInt) {
		case 1:
			/*
			 * TODO: implement class
			 * Ablauf des Programms in der jeweiligen Klasse...
			 * 
			 */
			
			Customer newCustomer = new Customer("Post", "Dennis", new Date(), new Date(), currentEmployer);
			Girokonto newGirokonto = new Girokonto(newCustomer, new Date(), currentEmployer);
			
			
			showProgramStartMenu(scanner);
			break;
			
		case 2:
			System.out.println("menu 2");
			/*
			 * TODO: implement class
			 * Ablauf des Programms in der jeweiligen Klasse...
			 * 
			 */
			
			currentEmployer = new Employer("Post", "Dennis");
			Customer cust1 = new Customer("Mustermann", "Max", new Date(), new Date(), currentEmployer);
			Girokonto giro1 = new Girokonto(cust1, new Date(), currentEmployer);
			
			Customer cust2 = new Customer("Muster", "Bettina", new Date(),  new Date(), currentEmployer);
			Girokonto giro2 = new Girokonto(cust2, new Date(), currentEmployer);
			
			System.out.println("Giro1 Saldo: " + giro1.getCurrentSaldo());
			System.out.println("Giro2 Saldo: " + giro2.getCurrentSaldo() + "\n");
			
			giro1.setNewDispo(-1400);
			giro2.setNewDispo(-2500);
			
			
			System.out.println("Überweisung.." + "\n");
			
			giro2.transferValueTo(250f, giro1);
			
			System.out.println("Giro1 Saldo: " + giro1.getCurrentSaldo());
			System.out.println("Giro 2: " + giro2.getCurrentSaldo() + "\n");
			
			
			showProgramStartMenu(scanner);
			break;
			
		case 3:
			System.out.println("menu 3");
			/*
			 * TODO: implement class
			 * Ablauf des Programms in der jeweiligen Klasse...
			 * 
			 */
			showProgramStartMenu(scanner);
			break;
	
		case 4:
			System.out.println("menu 4");
			/*
			 * TODO: implement class
			 * Ablauf des Programms in der jeweiligen Klasse...
			 * 
			 */
			showProgramStartMenu(scanner);
			break;
			
		case 5:
			System.out.println("Programm wird beendet...");
			scanner.close();
			System.exit(0);
			break;
	
		default:
			break;
		}
	}

}
